package com.sam4cloud.oauth2.utils;

import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import org.apache.commons.codec.digest.Md5Crypt;

import java.nio.charset.StandardCharsets;

/**
 * @Author: Sam
 * @Date: 2022-11-25 14:13
 * @Description: 加密工具类
 */
public class EncryptUtils {

    /**
     * AES秘钥 16位/24位/32位
     */
    public static final String AES_KEY = "GEZa1#3sSIJ90_a2";
    /**
     * MD5盐值 以$1$开头
     */
    public static final String MD5_SALT = "$1$Es3z@5gac7_54zz";

    /**
     * AES解密
     *
     * @param data 需要解密的数据
     * @return
     */
    public static String aesDecrypt(String data) {
        return aesDecrypt(data, AES_KEY);
    }

    /**
     * AES解密
     *
     * @param data   需要解密的数据
     * @param aesKey 密钥
     * @return
     */
    public static String aesDecrypt(String data, String aesKey) {
        SymmetricCrypto symmetricCrypto = new SymmetricCrypto(SymmetricAlgorithm.AES, aesKey.getBytes(StandardCharsets.UTF_8));
        return symmetricCrypto.decryptStr(data);
    }

    /**
     * AES加密
     *
     * @param data 需要加密的数据
     * @return
     */
    public static String aesEncrypt(String data) {
        return aesEncrypt(data, AES_KEY);
    }

    /**
     * AES加密
     *
     * @param data   需要加密的数据
     * @param aesKey 密钥
     * @return
     */
    public static String aesEncrypt(String data, String aesKey) {
        SymmetricCrypto symmetricCrypto = new SymmetricCrypto(SymmetricAlgorithm.AES, aesKey.getBytes(StandardCharsets.UTF_8));
        return symmetricCrypto.encryptBase64(data);
    }


    /**
     * md5加盐加密
     *
     * @param data 需要加密的数据
     * @return
     */
    public static String md5SaltEncrypt(String data) {
        return md5SaltEncrypt(data, MD5_SALT);
    }


    /**
     * md5加盐加密
     *
     * @param data 需要加密的数据
     * @param salt 盐值
     * @return
     */
    public static String md5SaltEncrypt(String data, String salt) {
        return Md5Crypt.md5Crypt(data.getBytes(StandardCharsets.UTF_8), salt);
    }
}
